package com.team.recruitment_management_system.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.team.recruitment_management_system.mapper.TagMapper;
import com.team.recruitment_management_system.pojo.entity.Tag;
import com.team.recruitment_management_system.pojo.vo.TagVo;
import com.team.recruitment_management_system.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* @author 86147
* @description 针对表【tag(标签表)】的数据库操作Service实现
* @createDate 2024-03-21 20:28:40
*/
@Service
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag>
    implements TagService{
    @Autowired
    TagMapper tagMapper;
    @Override
    public Tag getByName(String name) {

        return tagMapper.selectByname(name);
    }

    @Override
    public String add(Tag tag) {
        Tag tag1 = tagMapper.selectByname(tag.getName());
        if (tag1==null){
            tagMapper.insert(tag);
            return "添加成功";
        }
         return "标签已存在，不能重复添加";
    }

    @Override
    public List<TagVo> getAll() {

        List<Tag> list = tagMapper.getAll();
        Map<Integer, TagVo> tagVoMap = new HashMap<>();

        // 遍历所有Tag，创建TagVo对象，并存入map
        for (Tag tag : list) {
            TagVo tagVo = new TagVo();
            // 设置TagVo的属性
            tagVo.setId(tag.getId());
            tagVo.setName(tag.getName());
            tagVo.setSort(tag.getSort());
            tagVo.setLevel(tag.getLevel());
            tagVo.setParentId(tag.getParentId());
            tagVo.setStatus(tag.getStatus());
            tagVo.setCreateTime(tag.getCreateTime());

            // 将TagVo对象存入map，key为id
            tagVoMap.put(tag.getId(), tagVo);
        }

        // 遍历所有TagVo，构建父子关系
        for (TagVo tagVo : tagVoMap.values()) {
            if (tagVo.getParentId() == 0) {
                // 父节点，不需要额外处理
            } else {
                // 子节点，找到父节点并添加子节点
                TagVo parentTagVo = tagVoMap.get(tagVo.getParentId());
                if (parentTagVo != null) {
                    parentTagVo.getChildren().add(tagVo);
                }
            }
        }

        // 从map中取出所有的父节点（parentId为0）
        return tagVoMap.values().stream()
                .filter(tagVo -> tagVo.getParentId() == 0)
                .collect(Collectors.toList());
    }
}




